#include <iostream>

using namespace std;

/*
 * 递增运算符重载
 *      1、前置递增
 *      2、后置递增
 */

class MyInteger{
public:
    // 重载前置++运算符, 返回引用是为了一直对一个数据进行操作
    MyInteger & operator++(){
        m_num++;
        return *this;
    }
    // 重载后置++运算符 int 占位参数，用于区分前置和后置递增，返回值是一个值，不是一个引用，因为如果返回引用，返回的是一个局部变量的引用，内存非法操作
    MyInteger operator++(int){
        MyInteger temp = *this;
        m_num++;
        return temp;
    }

    // 重载前置--运算符
    MyInteger & operator--(){
        m_num--;
        return *this;
    }
    // 重载后置--运算符
    MyInteger operator--(int){
        MyInteger temp = *this;
        m_num--;
        return temp;
    }
    MyInteger(){
        m_num = 0;
    }

    int m_num;
};

ostream & operator<<(ostream & cout, MyInteger m){
    cout << "m.m_num= " << m.m_num;
    return cout;
}

void test01(){
    MyInteger m;
    cout << ++(++m) << endl;
    cout << m << endl;

    cout << "---------------" << endl;
    cout << --(--m) << endl;
    cout << m << endl;

    cout << "=====================" << endl;

    MyInteger m2;
    cout << m2++ << endl;
    cout << m2 << endl;

    cout << "---------------" << endl;
    cout << m2-- << endl;
    cout << m2 << endl;


}

int main() {

    test01();

    return 0;
}
